import storage from 'good-storage'

const SEARCH_KEY = '__search__'

// 最大存储长度
const SEARCH_MAX_LENGTH = 15

// storage存储最近播放记录的一个键值
const PLAY_KEY = '__play__'

// storage喜好歌曲的键值
const FAVORITE_KEY = '__favorite__'

// 收藏最大长度
const FAVORITE_MAX_LENGTH = 200

// 可以存储的最大歌曲数量
const PLAY_MAX_LENGTH = 200

// 插入数据，compare为比较函数
function insertArray(arr, val, compare, maxLen) {
  const index = arr.findIndex(compare)

  // 如果是第一条数据，就什么都不做
  if (index === 0) {
    return
  }

  // 如果数组中已经有这一条数据，并且不是第一个位置，则删除掉它
  if (index > 0) {
    arr.splice(index, 1)
  }
  // 从开头位置压进数组
  arr.unshift(val)

  // 如果数组的长度大于最大存储长度，则将最后一个删除
  if (maxLen && arr.length > maxLen) {
    arr.pop()
  }
}

// 通用的从数组中删除元素的方法, compare为比较函数
function deleteFromArray(arr, compare) {
  let index = arr.findIndex(compare)

  if (index > -1) {
    arr.splice(index, 1)
  }
}

// 最新的搜索结果要总是展示在前面
export function saveSearch(query) {
  let searches = storage.get(SEARCH_KEY, [])
  insertArray(searches, query, (item) => {
    return item === query
  }, SEARCH_MAX_LENGTH)

  // 保存到storage里面，同时返回一个新的搜索历史数组
  storage.set(SEARCH_KEY, searches)
  return searches
}

// 获得历史搜索结果
export function loadSearch() {
  return storage.get(SEARCH_KEY, [])
}

// 删除历史搜索结果
export function deleteSearch(query) {
  let searches = storage.get(SEARCH_KEY, [])

  deleteFromArray(searches, (item) => {
    return item === query
  })

  storage.set(SEARCH_KEY, searches)
  return searches
}

// 清空所有搜索记录
export function clearSearch() {
  storage.remove(SEARCH_KEY)
  return []
}

// 保存最近播放的歌曲，并保存在本地记录
export function savePlay(song) {
  let songs = storage.get(PLAY_KEY, [])

  insertArray(songs, song, (item) => {
    return item.id === song.id
  }, PLAY_MAX_LENGTH)
  storage.set(PLAY_KEY, songs)
  return songs
}

// 读取最近播放的历史记录
export function LoadPlay() {
  return storage.get(PLAY_KEY, [])
}

// 保存收藏歌曲
export function saveFavorite(song) {
  let songs = storage.get(FAVORITE_KEY, [])

  insertArray(songs, song, (item) => {
    return song.id === item.id
  }, FAVORITE_MAX_LENGTH)
  storage.set(FAVORITE_KEY, songs)

  return songs
}

// 取消歌曲收藏
export function deleteFavorite(song) {
  let songs = storage.get(FAVORITE_KEY, [])

  deleteFromArray(songs, (item) => {
    return song.id === item.id
  }, FAVORITE_MAX_LENGTH)
  storage.set(FAVORITE_KEY, songs)

  return songs
}

// state初始加载的值
export function loadFavorite() {
  return storage.get(FAVORITE_KEY, [])
}

